草庐IT

Java EE 计划任务

全部标签

python - 管理 Celery 任务结果

我对Celery很陌生,我以为我在某处读到过任务结果只会在有限的时间内保留。但是,在通过它运行大量任务后,我的后端(redis)变得非常臃肿。有没有办法为任务结果设置TTL,或者这是我需要手动清除(以及如何清除)的东西? 最佳答案 根据celery文档,您可以使用CELERY_IGNORE_RESULT完全忽略所有结果.您还可以使用CELERY_RESULT_EXPIRES在一定时间后使结果过期,默认为1天。在注释中它说这应该只适用于redis后端,而其他一些后端需要celerybeat才能运行。还有CELERY_MAX_CACHE

任务调度之时间轮实现

前言在生活中太阳的东升西落,鸟类的南飞北归,四级的轮换,每天的上下班,海水的潮汐,每月的房租车贷等等,如果用程序员的视角看,这就是一个个的定时任务,在日常的开发工作中也有很多的定时任务场景:数仓系统凌晨进行的数据同步订单12小时未支付的状态校验rpc调用超时时间的校验缓存数据失效时间的延长定时开启的促销活动……假如现在有一个任务需要3s后执行,你会如何实现?简单点,直接一个线程的休眠,thread.sleep(3000),一行代码就能达到目的,但是性能嘛……,由于每个任务都需要一个单独的线程,当系统中存在大量任务,任务调度假如,现在有一个任务需要3s后执行,你会如何实现呢?简单点,直接一个休眠

python - celery 任务被发送到多个队列

我注意到celery一直在向多个队列发送任务,并且两个队列上的工作人员都在执行任务。我的队列定义是:CELERY_QUEUES=(Queue('default',Exchange('default'),routing_key='default'),Queue('client1',Exchange('client1'),routing_key='client1'),Queue('images',Exchange('media'),routing_key='media.images'),)然后,在停止所有worker之后,我运行:>>>tasks.ping.apply_async(queu

python - celery 任务被发送到多个队列

我注意到celery一直在向多个队列发送任务,并且两个队列上的工作人员都在执行任务。我的队列定义是:CELERY_QUEUES=(Queue('default',Exchange('default'),routing_key='default'),Queue('client1',Exchange('client1'),routing_key='client1'),Queue('images',Exchange('media'),routing_key='media.images'),)然后,在停止所有worker之后,我运行:>>>tasks.ping.apply_async(queu

python - celery 任务总是挂起

我尝试在Windows上使用redis后端运行Celery示例。代码如下:fromceleryimportCeleryapp=Celery('risktools.distributed.celery_tasks',backend='redis://localhost',broker='redis://localhost')@app.task(ignore_result=False)defadd(x,y):returnx+y@app.task(ignore_result=False)defadd_2(x,y):returnx+y我使用iPython控制台启动任务:>>>result_1=

python - celery 任务总是挂起

我尝试在Windows上使用redis后端运行Celery示例。代码如下:fromceleryimportCeleryapp=Celery('risktools.distributed.celery_tasks',backend='redis://localhost',broker='redis://localhost')@app.task(ignore_result=False)defadd(x,y):returnx+y@app.task(ignore_result=False)defadd_2(x,y):returnx+y我使用iPython控制台启动任务:>>>result_1=

python - 任务 Celery 中的 RuntimeError : Never call result. get()

我正在使用celery将任务发送到远程服务器并尝试取回结果。使用update_state不断更新任务状态远程服务器上的方法。我正在使用发送任务app.send_task('task_name')获取celery任务的结果是一个阻塞调用,我不希望我的Django应用程序等待结果和超时。所以我尝试运行另一个celery任务来获得结果。@app.task(ignore_result=True)defcatpure_res(task_id):task_obj=AsyncResult(task_id)task_obj.get(on_message=on_msg)但它会导致以下错误。Traceba

python - 任务 Celery 中的 RuntimeError : Never call result. get()

我正在使用celery将任务发送到远程服务器并尝试取回结果。使用update_state不断更新任务状态远程服务器上的方法。我正在使用发送任务app.send_task('task_name')获取celery任务的结果是一个阻塞调用,我不希望我的Django应用程序等待结果和超时。所以我尝试运行另一个celery任务来获得结果。@app.task(ignore_result=True)defcatpure_res(task_id):task_obj=AsyncResult(task_id)task_obj.get(on_message=on_msg)但它会导致以下错误。Traceba

python - Celery重启丢失定时任务

我使用Celery安排将来发送电子邮件。我将任务放在celery中,并在将来有时设置了apply_async()和ETA。当我查看flower时,我看到为future安排的所有任务都处于已接收状态。如果我重新启动celery,所有任务都将消失。为什么他们不见了?我使用Redis作为代理。编辑1在我发现的文档中:IfataskisnotacknowledgedwithintheVisibilityTimeoutthetaskwillberedeliveredtoanotherworkerandexecuted.ThiscausesproblemswithETA/countdown/ret

python - Celery重启丢失定时任务

我使用Celery安排将来发送电子邮件。我将任务放在celery中,并在将来有时设置了apply_async()和ETA。当我查看flower时,我看到为future安排的所有任务都处于已接收状态。如果我重新启动celery,所有任务都将消失。为什么他们不见了?我使用Redis作为代理。编辑1在我发现的文档中:IfataskisnotacknowledgedwithintheVisibilityTimeoutthetaskwillberedeliveredtoanotherworkerandexecuted.ThiscausesproblemswithETA/countdown/ret